package com.xbk.seckill.activity.application.service;

import com.xbk.seckill.activity.application.command.SeckillActivityCommand;
import com.xbk.seckill.activity.domain.model.SeckillActivity;
import com.xbk.seckill.common.model.dto.SeckillActivityDTO;

import java.util.Date;
import java.util.List;

/**
 * 秒杀活动
 *
 * @author xiexu
 * @date 2025/1/11 22:58
 */
public interface SeckillActivityService {

    /**
     * 保存活动信息
     * 
     * @param seckillActivityCommand 活动命令
     */
    void saveSeckillActivityDTO(SeckillActivityCommand seckillActivityCommand);

    /**
     * 根据状态获取活动列表
     * 
     * @param status 状态
     * @return 活动列表
     */
    List<SeckillActivity> getSeckillActivityList(Integer status);

    /**
     * 根据时间和状态获取活动列表
     * 
     * @param currentTime 当前时间
     * @param status      状态
     * @return 活动列表
     */
    List<SeckillActivity> getSeckillActivityListBetweenStartTimeAndEndTime(Date currentTime, Integer status);

    /**
     * 根据id获取活动信息
     * 
     * @param id 活动id
     * @return 活动信息
     */
    SeckillActivity getSeckillActivityById(Long id);

    /**
     * 修改状态
     * 
     * @param status 状态
     * @param id     活动id
     */
    void updateStatus(Integer status, Long id);

    /**
     * 根据状态和版本号获取活动列表
     * 
     * @param status  状态
     * @param version 版本号
     * @return 活动列表
     */
    List<SeckillActivityDTO> getSeckillActivityList(Integer status, Long version);

    /**
     * 获取活动信息，带有缓存
     * 
     * @param id      活动id
     * @param version 版本号
     * @return 活动信息
     */
    SeckillActivityDTO getSeckillActivity(Long id, Long version);
}
